package org.example.controller;

import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.service.WxOAuth2Service;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * 网页授权
 * @author shenguangyang
 */
@RestController
public class PageAuthController {
    @Resource
    private WxMpService wxMpService;

    @GetMapping("buildAuthPage")
    public String auth() {
        WxOAuth2Service oAuth2Service = wxMpService.getOAuth2Service();
        // 构建授权url
        return oAuth2Service.buildAuthorizationUrl("https://baobao.cn.utools.club/wxjava/mp/callback",
                WxConsts.OAuth2Scope.SNSAPI_USERINFO, null);
    }

    /**
     * 然后编写用户确认授权后的回调处理，利用code获取accessToken，再利用accessToken获取用户信息
     */
    @GetMapping("callback")
    public WxOAuth2UserInfo callback(String code) throws WxErrorException {
        WxOAuth2Service oAuth2Service = wxMpService.getOAuth2Service();
        // 利用code获取accessToken
        WxOAuth2AccessToken accessToken = oAuth2Service.getAccessToken(code);
        // 利用accessToken获取用户信息
        return oAuth2Service.getUserInfo(accessToken, null);
    }
}
